package com.hrbxlh.virtualization.constant;

import com.hrbxlh.virtualization.util.PropertiesUtil;

/**
 * @author cheer
 */
public final class DockerConstant {

    /**
     * docker监听的tcp端口
     * 在部署docker的服务器的 /lib/systemd/system/docker.service 进行配置
     */
    private static final String TCP_PORT =
            PropertiesUtil.getProperty(GlobalConstant.VIRTUALIZATION_CONFIG_FILE, "docker-tcp-port");

    /**
     * 使用的docker api版本
     */
    private static final String API_VERSION =
            PropertiesUtil.getProperty(GlobalConstant.VIRTUALIZATION_CONFIG_FILE, "docker-api-version");

    /**
     * api接口模板前缀
     * 第一个 %s 为docker宿主机的ip
     */
    private static final String URL_PREFIX = "http://%s:" + TCP_PORT + "/" + API_VERSION;

    /**
     * 构建镜像的api接口模板
     * 第一个 %s 为容器的id
     * 第二个 %s 为构建的镜像名称
     */
    public static final String COMMIT_IMAGE_URL = URL_PREFIX + "/commit?container=%s&repo=%s";

    /**
     * 上传镜像的api接口模板
     * 第一个 %s 为上传的镜像名称
     */
    public static final String PUSH_IMAGE_URL = URL_PREFIX + "/images/%s/push";

    /**
     * 上传镜像需要携带一个用户标识，这里模拟一个用户的信息
     */
    public static final String MOCK_USER =
            "{\"username\": \"jdoe\",\"password\": \"secret\",\"email\": \"jdoe@acme.com\"}";

    /**
     * 删除镜像的api接口模板
     * 第一个 %s 为删除的镜像名称
     */
    public static final String DELETE_IMAGE_URL = URL_PREFIX + "/images/%s?force=true";

    /**
     * docker api返回404时的异常信息
     */
    public static final String NOT_FOUND = "404 Not Found";

    /**
     * 创建exec实例的api接口模板
     * 第一个 %s 为容器的id或名称
     */
    public static final String EXEC_CREATE_URL = URL_PREFIX + "/containers/%s/exec";

    /**
     * 创建exec实例的api接口请求体模板
     * 第一个 %s 为执行的命令
     */
    public static final String EXEC_CREATE_REQUEST_BODY = "{\"AttachStdin\": false," +
            "\"AttachStdout\": true," +
            "\"AttachStderr\": true," +
            "\"Tty\": false," +
            "\"Cmd\": [\"sh\",\"-c\",\"%s\"]}";

    /**
     * 启动exec实例的api接口模板
     * 第一个 %s 为exec实例的id
     */
    public static final String EXEC_START_URL = URL_PREFIX + "/exec/%s/start";

    /**
     * 启动exec实例的api接口请求体
     */
    public static final String EXEC_START_REQUEST_BODY = "{\"Detach\": false,\"Tty\":false}";
}
